module.exports = {
    // 数据库集合靠函数去传递
    insert(CollectionName, insertData) {
        // 数据库的操作属于异步操作，后续的业务逻辑会交给执行的那个单位
        // A 调用了B B包含异步操作,操作完毕 A继续执行业务逻辑
        // 异步操作  --- 回调函数 / promise / generator + yeild / async + await
        // User.insertMany(insertData, (err) => {
        //   if (err) throw err;
        //   console.log('插入成功')
        // })
        // promise的写法
        // return new Promise((resolve, reject) => {
        // })
        return new Promise((resolve, reject) => {
            CollectionName.insertMany(insertData, (err) => {
                if (err) throw err;
                resolve()
            })
        })
    },
    delete(CollectionName, deleteData, deleteType) {
        // User.deleteOne(deleteData, (err) => {})
        // User.deleteMany(deleteData, (err) => {})

        // style.display = "none"   <===>  style['display'] = "none"
        // style.animation = "test" 兼容性 
        // 对象后的属性不可以是变量，如果有变量，写成 对象[属性] 形式

        deleteType = deleteType || 'deleteOne' // 默认为删除单条数据

        return new Promise((resolve, reject) => {
            CollectionName[deleteType](deleteData, (err) => {
                if (err) throw err;
                resolve()
            })
        })
    }, update(CollectionName, whereObj, updateObj, updateType) {
        updateType = updateType || 'updateOne'
        return new Promise((resolve, reject) => {
            CollectionName[updateType](whereObj, updateObj, (err) => {
                if (err) throw err;
                resolve()
            })
        })
    }, find(CollectionName, whereObj, showObj) {
        return new Promise((resolve, reject) => {
            CollectionName.find(whereObj, showObj).exec((err, data) => {
                if (err) throw err;
                resolve(data)
            })
        })
    }, paging(CollectionName, whereObj, showObj, limitNum, pageCode) {
        return new Promise((resolve, reject) => {
            // limit(limitNum) 每页显示个数
            // skip(limitNum * pageCode) // 每页从哪一个开始
            CollectionName.find(whereObj, showObj).limit(limitNum).skip(limitNum * pageCode).exec((err, data) => {
                if (err) throw err;
                resolve(data)
            })
        })
    }, distinct(CollectionName, name) {
        return new Promise((resolve, reject) => {
            CollectionName.distinct(name).exec((err, data) => {
                if (err) throw err;
                resolve(data)
            })
        })
    }
}